In present business environments, many information systems exist to process transaction information. For example, certain banking information systems may utilize transaction information to track transactions initiated by account holders. A banking information system may store transaction information in a database. Furthermore, the banking information system may utilize transaction numbers to provide order to database actions. The banking information system may assign an ever-increasing (monotonic) sequence of numbers to database actions, so that their order may be retained and processing of the actions may occur in an ordered manner. For example, the banking information system may utilize transaction numbers to ensure that an electronic transfer of funds does not occur before a deposit transaction is completed.
The concept of utilizing transaction numbers is clearly applicable to a very large range of data processing applications in addition to banking information systems. For example, many business to business information systems may require sequence numbering to manage purchase orders, delivery arrangements, invoicing, and payment information via extensive databases. Broadly speaking, the provision of sequence numbers may be thought of as a form of time stamping. Of course, there are numerous applications of time stamping in many industries. Accordingly, it shall be further appreciated that the sequence numbering process is applicable to many applications beyond applications related to financial or commercial environments. In general, any application that orders a significant amount of data objects may utilize sequence number generation. Distributed applications especially benefit from sequence number generation.
Sequence numbering is a relatively simply process to implement upon a single processor system. However, it is evident that most practical applications of sequence numbers require scalability, i.e. the sequence numbering may be employed up to an arbitrary number of logical nodes which are usually distributed across a communication medium or system fabric. To achieve scalibility, various mechanisms may be employed, such as determining which process maintains the current sequence number; which process is incrementing the number; which process is retaining a master list of sequence numbers; and the like. To implement these tasks in a distributed manner in a multi-node environment, the respective processors located at the various nodes allocate a portion of processing time to threads responsible for these overhead mechanisms. Additionally, an amount of signaling occurs over the communication medium for similar allocation to overhead mechanisms. When these mechanisms are implemented in software, the overhead processing and communication protocol signaling are significant. By allocating a significant portion of system resources to the overhead tasks, milliseconds of delay are introduced which significantly reduces the scalability of the system. In fact, delays of several milliseconds may cause negative scaling, i.e. coordinating the functionality over several nodes may actually cause a reduction in processing capacity.
Similarly, hardware implementations of the monotonic sequence number generation proved problematic. Hardware implementations have involved placing a device in a system fabric accessible by the various processors by interfaces. In this environment, latency is reduced. However, the price of reducing latency in this implementation is reduced availability. Specifically, this implementation creates a single point of failure that may cause the entire system to malfunction.